#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/wait.h>


void ChildRun()
{
    int cnt = 5;
    while (1)
    {
        printf("I am child process,pid:%d, ppid:%d, cnt:%d\n", getpid(), getppid(), cnt);
        cnt--;
        sleep(1);
    }
}

int main()
{
    printf("I am father process,pid:%d, ppid:%d\n", getpid(), getppid());

    pid_t id = fork();
    if (id == 0)
    {
        //child
       ChildRun();
       printf("child quit...\n");
       exit(1);
    }
    else 
    {
        sleep(7);
        int status = 0;
        //father
        //pid_t rid = wait(NULL);
        pid_t rid = waitpid(id, &status, 0);
        if (rid > 0)
        {
            printf("wait sucess, rid:%d, status:%d, child_quit_code:%d, child_quit_signal:%d\n", rid, status, (status>>8)&0xff, status&0x7f);
        }
        else 
        {
            printf("wait failed, status:%d\n", status);
        }
        sleep(3);
    }

    return 0;
}

//int main()
//{
//    printf("hello 111");
//    sleep(2);
//    
//    _exit(3);
//}







//自定义枚举常量
//enum 
//{
//    Success = 0,
//    Div_zero,
//    Mod_zero,
//};
//
//int exit_code = 0;
//
//const char* CodetoErrString(int code)
//{
//    switch(code)
//    {
//        case Success:
//            return "Success";
//        case Div_zero:
//            return "Div_zero";
//        case Mod_zero:
//            return "Mod_zero";
//        default:
//            return "Unkon error";
//    }
//}
//
//int Div(int x, int y)
//{
//    if (y == 0)
//    {
//        exit_code = Div_zero;
//        return -1;
//    }
//    _exit(13);
//}
//
//int main()
//{
//    //int *p = NULL;
//   // while (1)
//   // {
//   //     printf("I am process, pid:%d, ppid:%d\n", getpid(), getppid());
//   //     sleep(1);
//   //     exit(123);
//   //     //*p = 1000;
//   // }
//    int result = Div(10, -10);
//    printf("result:%d [%s]\n", result, CodetoErrString(exit_code));
//    //result = Div(10, 0);
//    //printf("result:%d [%s]\n", result, CodetoErrString(exit_code));
//
//    //return exit_code;
//
//
//
//   // for (int codeerror = 0; codeerror < 255; codeerror++)
//   // {
//   //     printf("%d: %s\n", codeerror, strerror(codeerror));
//   // }
//   // printf("I am process.pid:%d, ppid:%d\n", getpid(), getppid());
//   // sleep(2);
//
//    return 0;
//    //return 100;
//}
